home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / turric03.zip / TURRIC03.ZIP / PROGS / M-SHALRA.QC < prev    next >
Text File  |  1997-01-30  |  8KB  |  258 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SHAL-RATH MORPH
  5.  
  6. ==============================================================================
  7. */
  8. $cd /raid/quake/id1/models/shalrath
  9. $origin 0 0 24
  10. $base base
  11. $skin skin
  12. $scale 0.7
  13.  
  14. $frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
  15. $frame attack9 attack10 attack11
  16.  
  17. $frame pain1 pain2 pain3 pain4 pain5
  18.  
  19. $frame death1 death2 death3 death4 death5 death6 death7
  20.  
  21. $frame    walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
  22. $frame    walk11 walk12
  23.  
  24. void() player_shalrath_stand = [ $walk1, player_stand1 ] { };
  25. void() player_shalrath_run = {
  26.     if(self.walkframe >= 12)
  27.         self.walkframe = 0;
  28.     self.frame = $walk1 + self.walkframe;
  29.     self.walkframe = self.walkframe + 1;
  30. };
  31.  
  32. void() player_shalrath_pain1 = [ $pain1, player_shalrath_pain2 ]
  33. //** PATCH_BEGIN - morph2 - Turrican ****
  34. {
  35.     PainSound();
  36.     self.pain_finished = time + 0.4;
  37.     self.attack_finished = time + 0.4;
  38. //    sound (self, CHAN_VOICE, "shalrath/pain.wav", 1, ATTN_NORM);
  39. };
  40. //** PATCH_END - morph2 - Turrican ******
  41. void() player_shalrath_pain2 = [ $pain1, player_shalrath_pain3 ] {};
  42. void() player_shalrath_pain3 = [ $pain1, player_shalrath_pain4 ] {};
  43. void() player_shalrath_pain4 = [ $pain1, player_shalrath_pain5 ] {};
  44. void() player_shalrath_pain5 = [ $pain1, player_stand1 ] {};
  45.  
  46. // void() player_shalrath_jump = { self.velocity_z=10; };
  47.  
  48. void() player_ShalMissileTouch =
  49. {
  50.     if (other == self.owner)
  51.         return;        // don't explode on owner
  52.  
  53.     if (other.classname == "monster_zombie")
  54.         T_Damage (other, self, self, 110);    
  55.     T_RadiusDamage (self, self.owner, 80, world);
  56.     sound (self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
  57.  
  58.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  59.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  60.     WriteCoord (MSG_BROADCAST, self.origin_x);
  61.     WriteCoord (MSG_BROADCAST, self.origin_y);
  62.     WriteCoord (MSG_BROADCAST, self.origin_z);
  63.  
  64.     self.velocity = '0 0 0';
  65.     self.touch = SUB_Null;
  66.     setmodel (self, "progs/s_explod.spr");
  67.     self.solid = SOLID_NOT;
  68.     s_explode1 ();
  69. };
  70. /*
  71. ================
  72. player_ShalMissile
  73. ================
  74. */
  75. void() ShalHome;
  76. void() player_ShalMissile =
  77. {
  78.     local    entity     missile;
  79.  
  80.     makevectors(self.v_angle);
  81.  
  82.     self.effects = self.effects | EF_MUZZLEFLASH;
  83.     sound (self, CHAN_WEAPON, "shalrath/attack2.wav", 1, ATTN_NORM);
  84.  
  85.     missile = spawn ();
  86.     missile.owner = self;
  87.  
  88.     missile.solid = SOLID_BBOX;
  89.     missile.movetype = MOVETYPE_FLYMISSILE;
  90.     setmodel (missile, "progs/v_spike.mdl");
  91.  
  92.     setsize (missile, '0 0 0', '0 0 0');        
  93.  
  94.     makevectors (self.v_angle);
  95.     if(self.enemy.classname == "worldspawn") {
  96.         traceline (self.origin, self.origin + v_forward * 2048, FALSE, self);
  97.         self.enemy=trace_ent;
  98.     }
  99.     missile.velocity = v_forward;
  100.     if(self.enemy.classname == "worldspawn") {
  101.         missile.enemy = world;
  102.         //missile.velocity = v_forward;
  103.     } else {
  104.         missile.enemy = self.enemy;
  105.         //missile.velocity = normalize(self.enemy.origin - self.origin);
  106.     }
  107.  
  108.     missile.velocity = missile.velocity * 400;
  109.     missile.angles = vectoangles(missile.velocity);
  110.  
  111.     missile.origin = self.origin + '0 0 10';
  112.     missile.avelocity = '300 300 300';
  113.     missile.nextthink = 0.4 + time;
  114.     missile.think = ShalHome;
  115.     missile.touch = player_ShalMissileTouch;
  116. };
  117.  
  118. void() player_shalrath_attack1 = [ $attack1, player_shalrath_attack2 ] {
  119.     local vector v;
  120.     sound (self, CHAN_VOICE, "shalrath/attack.wav", 1, ATTN_NORM);
  121.     self.attack_finished=time+1;
  122.     makevectors(self.v_angle);
  123.     v=aim(self, 2048);
  124.     traceline(self.origin+ self.view_ofs, self.origin+v * 2048 + self.view_ofs, FALSE, self);
  125.     if((trace_ent.classname != "worldspawn") && (trace_ent.takedamage & DAMAGE_AIM)) {
  126.         self.enemy = trace_ent;
  127.     } else if(self.enemy) {
  128.         if(!visible(self.enemy)) self.enemy=world;
  129.         if(!infront(self.enemy)) self.enemy=world;
  130.         if(self.enemy.health <=0) self.enemy=world;
  131.         if(self.enemy.takedamage != DAMAGE_AIM) self.enemy=world;
  132.     }
  133. };
  134. void() player_shalrath_attack2 = [ $attack2, player_shalrath_attack3 ] {};
  135. void() player_shalrath_attack3 = [ $attack4, player_shalrath_attack4 ] {};
  136. void() player_shalrath_attack4 = [ $attack8, player_shalrath_attack5 ] {};
  137. void() player_shalrath_attack5 = [ $attack10, player_stand1 ] {player_ShalMissile(); };
  138.  
  139.  
  140. string() player_shalrath_killmsg = {
  141.     return " was exploded by ";
  142. };
  143.  
  144. string() player_shalrath_killmsg2 = {
  145.     return ".\n";
  146. };
  147.  
  148. //** PATCH_BEGIN - morph2 - Turrican ****
  149. void() player_shal_death1 =[ $death1,    player_shal_death2     ] {};
  150. void() player_shal_death2 =[ $death2,   player_shal_death3     ] {};
  151. void() player_shal_death3 =[ $death3,   player_shal_death4     ] {};
  152. void() player_shal_death4 =[ $death4,   player_shal_death5     ] {};
  153. void() player_shal_death5 =[ $death5,   player_shal_death6     ] {};
  154. void() player_shal_death6 =[ $death6,   player_shal_death7     ] {};
  155. void() player_shal_death7 =[ $death7,   player_shal_death7     ]
  156. {
  157.     PlayerDead();
  158.     MakePlayerCorpse (self.max_health * self.health_modifier * 0.65,
  159.                       '-32 -32 -24', '32 32 -12');
  160. };
  161.  
  162. void () player_shalrath_die =
  163. {
  164.     self.items = self.items - (self.items & IT_INVISIBILITY);
  165.     self.invisible_finished = 0;    // don't die as eyes
  166.     self.invincible_finished = 0;
  167.     self.super_damage_finished = 0;
  168.     self.radsuit_finished = 0;
  169.     self.view_ofs = '0 0 -8';
  170.     self.deadflag = DEAD_DYING;
  171.     self.flags = self.flags - (self.flags & FL_ONGROUND);
  172.     self.movetype = MOVETYPE_TOSS;
  173.     if (self.velocity_z < 10)
  174.         self.velocity_z = self.velocity_z + random()*300;
  175.  
  176. //** PATCH_BEGIN - gibbin3 - Turrican ****
  177. // Pass player size and head.mdl to Corpse_die using globals.
  178.     self.corpse_size = SIZE_MEDIUM;
  179.     self.head_gib_name = "progs/h_shal.mdl";
  180. //** PATCH_END - gibbin3 - Turrican ******
  181.  
  182. // check for gib
  183.     if (self.health < -90)
  184.     {
  185. //** PATCH_BEGIN - gibbin3 - Turrican ****
  186.         Corpse_die();
  187. //** PATCH_END - gibbin3 - Turrican ******
  188.         return;
  189.     }
  190.  
  191.     DeathSound();
  192.  
  193.     self.angles_x = 0;
  194.     self.angles_z = 0;
  195.  
  196. // regular death
  197.     player_shal_death1();
  198.  
  199. };
  200. //** PATCH_END - morph2 - Turrican ******
  201.  
  202. void() player_shalrath_become = {
  203. //** PATCH_BEGIN - morph2 - Turrican ****
  204. //    bprint(self.netname);
  205. //    bprint(" has become a vore.\n");
  206.     sprint( self, "You have become a vore.\n");
  207.  
  208. // Stop the morph from flying.
  209.     if (self.flags & FL_FLY)
  210.     {
  211.         localcmd("fly");
  212.         self.flags = self.flags - FL_FLY;
  213.     }
  214.     self._die = player_shalrath_die;
  215. //** PATCH_END - morph2 - Turrican ******
  216.     self._stand=player_shalrath_stand;
  217.     self._run=player_shalrath_run;
  218.     self._pain=player_shalrath_pain1;
  219.     self._jump=SUB_Null;
  220.     self._jump2=SUB_Null;
  221.     self._attack=player_shalrath_attack1;
  222.     self._impulse=SUB_Nop;
  223.     self._can_get_p=SUB_False;
  224.     self._killmsg=player_shalrath_killmsg;
  225.     self._killmsg2=player_shalrath_killmsg2;
  226.     setmodel(self,"progs/shalrath.mdl");
  227.     self.modelindex_morph=self.modelindex;
  228.     self.weaponmodel="";
  229. //** PATCH_BEGIN - morph2 - Turrican ****
  230.     self.view_ofs = '0 0 32';
  231.     if(!deathmatch)
  232.         setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
  233.     else
  234.         setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  235. //** PATCH_END - morph2 - Turrican ******
  236.     self.health = self.health * 3.0 / self.health_modifier;
  237.     self.health_modifier = 3.0;
  238.     makevectors(self.v_angle);
  239.     spawn_tfog(self.origin + 20 * v_forward);
  240.     DropBackpack2();
  241. //** PATCH_BEGIN - morph2 - Turrican ****
  242.     self.currentammo = 0;
  243.     self.weapon = VORE_HOMING_MISSILE;
  244. // Make morphs ignore player colors.
  245.     if (self.colormap != 0)
  246.     {
  247.         self.temp_colormap = self.colormap;
  248.         self.colormap = 0;
  249.     }
  250. // Make morphs ignore player skins.
  251.     if (self.skin != 0)
  252.     {
  253.         self.temp_skin = self.skin;
  254.         self.skin = 0;
  255.     }
  256. //** PATCH_END - morph2 - Turrican ******
  257. };
  258.